package com.yc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yc.common.handler.MapResultHandler;
import com.yc.entity.StudentInfo;
import com.yc.vo.StudentAttendanceRecord;
import com.yc.vo.StudentEdit;
import com.yc.vo.StudentInfoAndClassInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 学生表;(student_info)表服务接口
 * @date : 2023-6-28
 */
public interface StudentInfoService{



    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    StudentInfo queryById(Integer id);



    /**
     * 分页查询
     *
     * @param studentInfo 筛选条件
     * @param current 当前页码
     * @param size  每页大小
     * @return
     */
    Page<StudentInfo> paginQuery(StudentInfo studentInfo, long current, long size);

    /**
     * 分页查询
     *
     * @param studentEdit 查询条件
     * @return 实例集合
     */
    Page<StudentInfoAndClassInfo> selectStudentInfoAndClassInfo(Page<StudentInfoAndClassInfo> page, StudentEdit studentEdit);
    /**
     * 新增数据
     *
     * @param studentInfo 实例对象
     * @return 实例对象
     */
    StudentInfo insert(StudentInfo studentInfo);
    /**
     * 更新数据
     *
     * @param studentInfo 实例对象
     * @return 实例对象
     */
    StudentInfo update(StudentInfo studentInfo);
    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

    /**
     * 添加学生
     * @param studentInfo 编辑学生的信息
     * @return
     */
    int addStudent(StudentInfo studentInfo);

    /**
     * 修改学生信息
     * @param studentInfo 编辑学生的信息
     * @return  1 成功 0 失败
     */
    int modifyStudent(StudentInfo studentInfo);

    /**
     * 查找该学生id是否存在
     * @param studentInfo 学生信息
     */
    void selectStudentExists(StudentInfo studentInfo);

    /**
     * 任命为班长或学委
     * @param studentInfo 学生信息
     * @return  1 成功 0 失败
     */
    int appointStudent(StudentInfo studentInfo);

    /**
     * 撤职，重新任命
     * @param studentInfo
     * @return
     */
    int removeCom(StudentInfo studentInfo);

    /**
     * 批量添加学生
     * @param studentInfoList 学生列表
     * @return 成功
     */
    int addStudentList(List<StudentInfo> studentInfoList);

    /**
     * 查询所有的学生
     * @return  <学号, id>
     */
    Map<String, String> selectAllStudent();

    /**
     * 重置学生密码
     * @param id
     */
    void resetPassword(Integer id, String stuid);

    /**
     * 通过cid查询出班级所在的学生
     * @param scheduleId 课程Id
     * @param cid 班级Id
     * @return
     */
    List<StudentAttendanceRecord> selectStudentInfoByCid(String scheduleId, String cid);

    /**
     * 通过cid查询出班级所在的学生 存入redis
     * @param  uuid redis中的键
     * @param cids 查询条件
     * @return 学生集合
     */
    Object selectStudentsByCid(String uuid, List<String> cids);

    /**
     * 根据专业、班级查考勤统计
     * @param stuid
     * @return
     */
    Map<String,Object> selectBystuSum(String stuid);

    Map<String,Object> selectBystuInfoSum(int pageNum, int pageSize, String cname );
}
